perm filename INIT.IRC[1,LCS] blob
sn#305751 filedate 1977-09-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
C00005 00003 EXTERNAL FUNCTION
C00007 00004 FUNCTION SYNTH(ARRAY FUNC)
C00009 00005 <comment: type 'SETMAG nchns, srate'
C00012 00006 <FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00015 ENDMK
C⊗;
COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
***THIS IS EXPORT VERSION. CONTAINS NO MENTION OF DATADISC. (DDCLR,NOTDD)
**** ALL DISPLAY CODE WILL REQUIRE CHANGES, HENCE IS COMMENTED OUT.
TO CREATE MUSIC.SAV RUN COMMAND FILE, 'MUS.CMD',
THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.
THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
SEG(ARRAY FUNC)
SYNTH(ARRAY FUNC)
POWER( N, X ) [GIVES POWER OF N TO THE XTH] ;
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62; CS←DF←277.18; D←293.66; DS←EF←311.13; E←FF←329.63;
F←ES←349.23; FS←GF←369.99; G←391.99; GS←AF←415.31;
A←440; AS←BF←466.16; B←493.89; CF←B/2; BS←C*2;
COMMENT:******DPYSET(INTEGER POG,ARRAY DPYBUF,INTEGER SIZE),
| ALINE(INTEGER X1,INTEGER Y1,INTEGER X2,INTEGER Y2),
| DPYOUT(INTEGER POG),
| AIVECT(INTEGER X,INTEGER Y),
| TYPLOC(INTEGER X,INTEGER Y), RVECT(INTEGER X,INTEGER Y)**
|
|FUNCTION SEE(ARRAY FUNC)**
| BEGIN
| ARRAY DPY(225)** VARIABLE IY,I,IY2**
| DPYSET(2,DPY,225)**
|COMMENT THIS VERSION MUST BE LOADED WITH %LEXPLIB**
| ALINE(-264,200,256,200)** ALINE(-266,328,-246,328)**
| ALINE(-266,456,-246,456)** ALINE(-266,72,-246,72)**
| ALINE(-266,-56,-246,-56)** ALINE(-256,-56,-256,456)**
| ALINE(0,190,0,210)** ALINE(-128,190,-128,210)**
| ALINE(128,190,128,210)**
| IY←INT(FUNC(0)*256.0+200.0)** AIVECT(-256,IY)**
|
|COMMENT: DISPLAY ONLY EVERY THIRD SEGMENT **
| FOR I←1 STEP 3 UNTIL 511 DO
| BEGIN
| IY2←INT(FUNC(I)*256.0+200.0)**
| RVECT(3,IY2-IY)** IY←IY2**
| END** DPYOUT(2)**
| END**
|
|FUNCTION SEEIT(ARRAY FUNC)** BEGIN
| VARIABLE K** PRINT "SEG ARRAY "**
| SEE(FUNC)**
|***** END;
EXTERNAL FUNCTION
RDNUM(X), SIND(X),
SIN(A), EXP(A), ALOG(A), SQRT(A);
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
A1←0; ST←0; STPP←0; X512←0;
PRINT " SEG ARRAY ";
WHILE STPP ≤ 1 DO
BEGIN
RDNUM(A2);
IF A2 =512 THEN X512←A2;
IF A2 =512 THEN RDNUM(A2); RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
IF STPP ≤ 1 THEN A1←A2;
END;
WHILE STPP < 999 DO
BEGIN
IS← INT(STPP*5.120+.0001);
IF X512 > 0 THEN IS←INT(STPP+.0001);
IF IS > 512 THEN
BEGIN
FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
BEGIN
RDNUM(RK); FUNC(K)← RK;
END;
COMMENT:*** SEEIT(FUNC);
RETURN;
END;
STPP ← IS-1; STPS ← STPP-ST;
IS ← INT(STPS); DIF←A2-A1;
IT←INT(ST); ST ← STPP;
FOR K←0 STEP 1 UNTIL IS DO
BEGIN
RK ← K;
FUNC(K+IT) ← A1+DIF*RK/STPS;
END;
COMMENT:***IF STPP = 511 THEN SEEIT(FUNC);
IF STPP ≥ 511 THEN RETURN;
A1←A2; ST←STPP;
RDNUM(A2); RDNUM(STPP);
END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN
FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
RDNUM(XX); IF XX = 99 THEN XX ← -XX;
H ← XX; IF XX < 0 THEN RDNUM(H);
WHILE H < 999 DO
BEGIN
RDNUM(AMP);
X ←0; CON ←0;
IF XX < 0 THEN
BEGIN
RDNUM(X); RDNUM(CON);
COMMENT X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
X ← X * 512/360 +1;
END;
FOR J ← 0 STEP 1 UNTIL 511 DO
BEGIN
XK ← SIND(X*360/512) * AMP + CON;
COMMENT: .703125 = 360/512 ; XK ← SIND(X*.703125) * AMP + CON ;
IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
X ← X+H; IF X > 512 THEN X ← X-512;
END;
RDNUM(H);
END;
X ← FUNC(0); COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511 DO BEGIN H ← ABS(FUNC(J));
IF X < H THEN X ← H; END;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN FUNC(J) ← FUNC(J) / X ; END;
PRINT " SYNTH ARRAY "; COMMENT:********SEE(FUNC);
END;
FUNCTION POWER(X,N)=EXP(N*ALOG(X)); comment nth power of x;
<comment: type 'SETMAG; nchns, srate' ;
FUNCTION MAGERR(X);
BEGIN PRINT "IMPROPER INPUT. "; X←0;
print "Type number of channels and sample rate: ";
END;
FUNCTION ADJRATE; BEGIN
IF SRATE < 6400 THEN BEGIN
IF SRATE <8 THEN SRATE ← 6400; IF SRATE <10 THEN SRATE ← 8000;
IF SRATE <12 THEN SRATE ← 10000; IF SRATE <16 THEN SRATE ← 12800;
IF SRATE <20 THEN SRATE ← 16000; IF SRATE <25 THEN SRATE ← 20000;
IF SRATE <32 THEN SRATE ← 25600; IF SRATE <40 THEN SRATE ← 32000;
IF SRATE <50 THEN SRATE ← 40000; IF SRATE <60 THEN SRATE ← 51200;
IF SRATE <80 THEN SRATE ← 64000; IF SRATE <100 THEN SRATE ← 80000;
IF SRATE <120 THEN SRATE ← 102400; IF SRATE <130 THEN SRATE ← 128000;
IF SRATE <200 THEN SRATE ← 160000; IF SRATE <220 THEN SRATE ← 204800;
IF SRATE <260 THEN SRATE ← 256000; IF SRATE <4000 THEN SRATE ← 10000;
COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC. 10000=10000;
END; END;
Function SETMAG;
begin
VARIABLE X; X←0;
WHILE X = 0 DO
BEGIN X←1; rdnum(nchns); rdnum(srate);
IF NCHNS > 4 THEN MAGERR(X);
IF NCHNS = 3 THEN MAGERR(X);
IF NCHNS < 1 THEN MAGERR(X);
ADJRATE;
COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
COMMENT: IF INT(SRATE/6400+.1) } SRATE/6400 THEN MAGERR(X);
END;
MAG←512/srate;
PRINT "NCHNS=",NCHNS," SRATE=",SRATE ;
end;
<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12800;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;
INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;
INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;
INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;
INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;
ARRAY F1,F2,F3,F4,F5,F6(512);
SEG(F1);.9 6,1 11 .9 82 .7 90 0 100; < MEZZO LEGATO
SEG(F2);1 3,1 11,.4 31,.1 51,0 100; < STACCATO
SYNTH(F3);1 1 999; < TOOT - SINE WAVE (USED FOR SIMP ALSO)
SYNTH(F4);1,.5 3,.3 5,.2 7,.1 999; < CLAR
SYNTH(F5);1,.3 2,.4 3,.2 8,.2 12 .1 999; < BRIT
SEG(F6);-1,1 1,7 -1,14 -1,100; < BUZZ
OUTFILE←"MUSIC.MSB"; <SETS UP DEFAULT OUTPUT FILE NAME. (BITS←12;)
NO_MSG←1; < INHIBITS REPETITIVE MESSAGES
PLAY;TOOT 0 .12 C 1000 F1 F3 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F3;FINISH;